home *** CD-ROM | disk | FTP | other *** search
/ BMUG TV-ROM Too Update / TVR Too Update.iso / Cool Stuff!!! / Expression Plug-in / Text only of Expression 3.0 Doc < prev   
Text File  |  1994-07-02  |  27KB  |  450 lines

  1. Expression 3.0b
  2. (We TV-ROM Too created this file for those of you without Word, it has no graphics)
  3.  
  4. Plug In for Photoshop™ and Premiere™
  5.  
  6. © 1992,1993 Jim Bumgardner (jbum@netcom.com, jbum@aol.com)
  7.  
  8.  
  9. What did I get?
  10.  
  11. You got this file, which contains the documentation, the Expression Photoshop™ filter, and, depending on where you got it from, you may have received a sample Quicktime™ movie or picture that was created with Expression and Adobe Premiere™.  Enjoy!
  12.  
  13. Expression is freeware.  The author retains the copyright, including the right to alter or sell the program.  You may use and copy Expression freely only on a non-commercial basis.  You may not alter or sell this program without the author's permission.
  14.  
  15. What is it?
  16.  
  17. Simple Explanation: Expression creates groovy abstract art in Adobe Photoshop, and psychedelic movies in Adobe Premiere.  It is also a fun way to explore arithmetic.  
  18.  
  19.  
  20. Image created with Expression (“Weave” Preset)
  21.  
  22. Technical Explanation: Expression is a Photoshop filter that can create images that change over time according to a mathematical formula or expression  (thus the name).
  23.  
  24. Possible uses:
  25.     Make psychedelic movies and OpArt.
  26.     Create test patterns galore.
  27.     Make wallpaper.
  28.     Make patterns for textiles / weavings.
  29.     Explore mathematics - zoom into the Mandelbrot set.
  30.     Create animated wipe stencils.
  31.     Create interesting texture and bump maps for 3D graphics.
  32.     Do all kinds of image processing.
  33.     Bring your Quadra to its knees!
  34.  
  35. How does it work?
  36.  
  37. Expression is a plug-in filter for Adobe Photoshop and Adobe Premiere.  It contains a little interpreter that solves an arithmetical expression for each pixel in an image.  It changes each pixel to a color that corresponds to the result of the expression.  You tell Expression which expressions to solve and how to map the results to a specific color.  
  38.  
  39. When Premiere applies the expression filter to successive frames of a movie, the results can vary according to the frame number, thus creating animation.
  40.  
  41. What do I need in order to use it?
  42.  
  43. This version of Expression requires a Mac with a 68020 chip and a 68881 fpu.  It has been optimized to be fastest on a Quadra, it will run a little slower than it should on an FX or other non-68040 based Mac.  Expression works with both Adobe Photoshop and Adobe Premiere.
  44.     
  45.  
  46. How do I use it?
  47.  
  48. With Photoshop…
  49. Place a copy of Expression in the folder where all your other Photoshop filters are.  Activate the filter from the Filter > Other sub-menu.  The Expression dialog box will appear (see below).  Fill in the blanks or select one of the presets.  Expression will than modify the selected area accordingly.
  50.  
  51. With Premiere…
  52. Expression really comes into its own when used with Adobe Premiere.  You can use it to create movies from scratch or to modify existing material.  Place a copy of Expression in the folder where your other Premiere plug-ins are kept.
  53.  
  54. Tip: It is a very good idea to test your expression movie ideas in Photoshop first, to make sure your frames work.  Select a small area of an image to process and apply the filter multiple times with Cmd-F.  The t  variable will increase by one each time, showing you how your animation will look.
  55.  
  56. To create a movie from scratch, create a black matte in the Project window using the "Add Matte…" menu command.  This will give Expression some raw material to work with.  Drag the matte into the construction window in video track A or B and stretch it the duration you would like your movie to be.  I usually create movies that are just a few seconds long, because they take a long time to generate.  Select the matte track by clicking on it and then select the "Filters…" menu command.  Select Expression from the list of filters on the left and hit the "« Add »" button.  The Expression dialog box will appear (see below).  Fill in the blanks or select one of the presets.  Later, when you select "Preview" or "Make Movie…", Premiere will apply the Expression filter to each frame.  This will significantly add to the length of time it takes to output each frame, depending on the complexity of the expression.  Mandelbrot and Julia sets take especially long to generate.  It took 14 hours to generate a 2.5 minute fractal zoom movie on a Quadra 900 (The results were well worth it though!)
  57.  
  58. To modify an existing movie, use the movie as the source material for the filter, instead of using a black matte.  By judicious use of the R, G and B variables, you can do a number of colorization effects.
  59.  
  60. Using Expression with other programs…
  61.  
  62. Expression can be used with any program that uses Photoshop filters.  For example it can be used to make movies with deBabelizer, and any other program which can apply Photoshop filters to the frames in a movie.  You may find this more convenient then Premiere, since the whole process can be scripted.
  63.  
  64. The Expression Dialog Box
  65.  
  66.  
  67.  
  68. R, G, and B (RGB Mode)
  69. H, S, and B (HSB Mode)
  70.  
  71. These fields are where you specify the expression you want to solve for each pixel.  A single expression is solved for the red, green and blue components of each pixel.  If the Grays radio button is selected, only the first expression is solved, and the result is copied to the green and blue.  If the HSB radio button is selected, the three expressions modify hue, saturation and brilliance.  The RGB and HSB modes work in Photoshop only when the image is in RGB mode, otherwise, you are operating only on a single channel, and you will get gray levels only.
  72.  
  73. These expressions can use most C language operators (see the reference guide), floating point constants, and some predefined variables (see the reference guide).  For example, if the R field contains the expression (r+10), you will  lighten the red component of the picture.  The expression int(x/20)*40 will create vertical stripes.
  74.  
  75. Grays
  76. RGB
  77. HSB
  78. When RGB is selectd, the three expressions operate on the red, green and blue components of each pixel.
  79.  
  80. When Grays is selected, Expression only calculates the first of the three expressions.  The resultant picture will be gray scale.
  81.  
  82. When HSB is selected, the three expressions are interpreted as hue, saturation and brilliance (instead of red, green and blue).
  83.  
  84. If you use Expression in Photoshop on a grayscale image (or any multi-channel image other than RGB), it will behave as if you have the Grays button checked.
  85.  
  86. Left, Top, Width, Height
  87. These expressions are solved once for each frame.  They are used to calculate what the x and y variables will contain for each pixel.  For example, if left and top are set to (0,0) and the width and height are set to (10000,10000), and you are rendering an image that is 100 pixels across, than for each pixel on the first scanline, x and y will be set to (0,0), (100,0), (200,0) etc.  
  88.  
  89. To make the x and y values correspond to pixel coordinates, set left and top to (0,0) and set width height to (fw, fh).
  90.  
  91. Idea: You can make an image pan to the right by incorporating t (time)  into left and right.  By incorporating t (time) into width and height, you can create different zooming effects.  For example, the following settings, pan diagonally while zooming out:
  92.  
  93.         left: t*5        width: 160*(1.1**t)
  94.         top: t*5        height: 120*(1.1**t)
  95.  
  96.  
  97. Center
  98. This checkbox causes the image to be centered around the coordinates specified by left and top.  Otherwise, left and top will correspond to the top lefthand corner of the image.
  99.  
  100. Zoom
  101. This specifies a zoom factor which is recomputed once per frame.  This can be used to create very dramatic effects in QuickTime movies.  The zoom is applied to the width and height after they have been recomputed.  For example, if the initial width and height are (100,100), and the zoom factor is 1.1, the widths and heights of each frame will be (100,100)  (110,110), (121,121), (133.1, 133.1) etc.  A zoom factor of 1.0 will result in no zooming.  Zoom factors less than 1.0 will zoom in, and zoom factors greater than 1.0 will zoom out.   Normally I use Zoom in conjunction with Center to zoom into the center of the picture.  Most of the fractal presets perform zooming.
  102.  
  103. You can compute how fast the movie will zoom in by using the following formula:
  104.  
  105.         r = Zt
  106.  
  107.     where r equals the image ratio - the width or height of the zoomed     image compared to the original width and height.
  108.         
  109.     Z is the zoom factor used in the Expression dialog, and
  110.  
  111.     t is the frame number (starting from 0).
  112.  
  113. Tip: If you want to see where the fractal movies are zooming into from Photoshop, temporarily set the width and height to a small value, such as 0.0004.
  114.  
  115. Result Range to Plot:
  116. Min and Max
  117. These fields are used to determine the range of results that are mapped to the intensity of each color component (which can only show 256 discreet values).   If Min is 0 and Max is 255, there is a direct 1-1 correspondence.  If Max is 1000, then the result will be scaled down so that the range 0-1000 can be displayed as 0-255 levels of intensity.
  118.  
  119. For example, if you are mapping the expression sin(x), the resultant values will range from -1 to +1.  In this case, you should set min to -1 and max to 1 so the sine wave will appear as a fluctuation from black to white.
  120.  
  121. Pin to Min/Max
  122. Wrap Over
  123. If the results of the expression go outside of the min-max range, this setting determines how it is dealt with (much like the AddPin and AddOver operations in Quickdraw).  If "Pin to Min/Max" is selected the value is pinned to 0 or 255.  If "Wrap Over" is selected, the value wraps over.  The wrap over setting can be used to create some interesting moire effects (try "x*y" with wrap turned on for a nice example).
  124.  
  125. Fractals…
  126. This brings up the Fractal Navigation dialog.  More on this below.
  127.  
  128. Cycle
  129. This checkbox can be used to force a cheesy color cycling effect on each frame.  After computing the color as 0-255, Expression will cycle the value by computing v=(v+t) mod 256.  You can get more precise control over color cycling by incorporating the t variable into your R G and B expressions.  The Mandel Cycle preset shows an example of this method.
  130.  
  131. OverSample (new for version 2.2)
  132. This checkbox causes Expression to antialias the output by averaging the results of four samples for each pixel.  This improves the appearance of fractals but causes Expression to take four times longer.  Zzzzzzzz.
  133.  
  134.   Preset
  135. This popup menu allows you to select (or create) preset expressions.  Previously saved popups will appear on the menu (A ResEdit TMPL is included to allow you to add or edit presets from within ResEdit).  You can add and delete presets from Expression by entering the name of the Preset you wish to add or delete, and then use the "Add" or "Delete" menu items.  These items are disabled if no name has been typed in.
  136.  
  137. Tip: You can change Expression's default settings by modifying the preset labelled "default".
  138.  
  139.  
  140.  
  141.  
  142. The Fractal Navigation Dialog Box
  143.  
  144.  
  145.  
  146. Fractal Movie making has been greatly simplified with Expression 3.0, also the time to render fractals has been sped up.  You can specify a zoom-point for a fractal movie using the Fractal Navigation dialog box.
  147.  
  148. Note: Before hitting the "Fractal" button to go into the Fractal Navigator, select one of the fractal presets from the presets menu or manually enter a fractal expression into the R,G,B fields.  You need to load an expression into the R,G,B fields which uses either the MAND() or JULIA() functions.  These expressions determine how the fractal will be colored.  The fractal navigator only controls the left,top,width,height and recursion fields on the main dialog - it is up to you to provide the R,G,B fields.
  149.  
  150. Fractal Navigator Dialog Items
  151.  
  152. Zoom Tool:
  153. When this tool is selected, you can zoom into the currently displayed fractal by clicking on the part you want to zoom into.  The cx, cy, and w fields will be updated to reflect the new coordinates.
  154.  
  155. Pan Tool:
  156. When this tool is selected you can scroll up, down, left and right by clicking on the appropriate area.  The cx and cy fields will be updated to relfect the new coordinates.
  157.  
  158. Render Modes:
  159. These tools change the rendering mode - you can render either a Mandelbrot or Julia set.  Either set can be rendered black and white or with the equipotential fields in shades of gray.
  160.  
  161. cx:
  162. This field corresponds to the "left" field in the main dialog box.  It is the coordinate of the center of the preview window.
  163.  
  164. cy:
  165. This fields corresponds to the "top" field in the main dialog box.  It is the Y coordinate of the center of the preview window.
  166.  
  167. p0:
  168. q0:
  169. For Julia sets, these coordinates determine the overall shape of the julia set. Values inside the area of the mandelbrot set will produce "connected" shapes.  Values outside the area of the mandelbrot set will produce dusts.   The most interesting looking shapes result when p0 and q0 are close to the border of the mandelbrot set. 
  170.  
  171. Tip: You can create shape changing julia set movies by animating the p0 and q0 values using t (time).
  172.  
  173. r:
  174. This expression determines how much recursion is performed in calculating fractals.  It is recomputed once per frame.  If the result of the expression is less than 64, 64 will be used.  Most of the fractal presets use an expression which causes recursion to deepen as you zoom in.  For some fractals, you may want to lessen or deepen the recursion.
  175.  
  176. w:
  177. This expression gets copied to the width and height fields when you hit the OK button.  It reflects how far you are "zoomed in" to the fractal.  To create a zooming-in movie, zoom in as far as you like here, then reset the width to 4 before computing each frame. 
  178.  
  179.  
  180. Expression Syntax
  181.  
  182. Expressions look pretty much like 'C' expressions with the exception of the ** operator and the ? and π variables.   Look at the presets to see some examples.
  183.  
  184. Operators
  185.  
  186. The following operators are available, ordered by precedence:
  187. Note: New Operators to version 3.0 are in bold.
  188.  
  189. Operator    Precedence    Meaning
  190.     !        1        Logical NOT (unary)
  191.     ~        1        Bitwise NOT (unary)
  192.     **        2        Raise to power
  193.     *        3        Multiplication
  194.     /        4        Division
  195.     %        5        Modulo
  196.     +        6        Addition
  197.     -        6        Subtraction
  198.     &        7        Bitwise AND
  199.     |        7        Bitwise OR
  200.     ^        7        Bitwise XOR
  201.     = or ==    8        Equality
  202.     != or <>    9        Inequality
  203.     <        9        Less Than
  204.     <=        9        Less Than or Equal
  205.     >        9        Greater Than
  206.     >=        9        Greater Than or Equal
  207.     &&        10        Logical AND
  208.     ||        10        Logical OR
  209.  
  210.  
  211. Variables
  212.  
  213. The following variables are available:
  214. Note: New variables to version 3.0 are in bold.
  215.  
  216.     x    Expression horizontal Coordinate
  217.     y    Expression vertical Coordinate
  218.     w    Expression image width
  219.     h    Expression image height
  220.     px    Horizontal pixel coordinate
  221.     py    Vertical pixel coordinate
  222.     pw    Image width in pixels
  223.     ph    Image height in pixels
  224.     fw    Filter rectangle width (corresponds to photoshop selection         rectangle)
  225.     fh    Filter rectangle height (corresponds to photoshop selection         height)
  226.     cx    The x coordinate of the center of the image.
  227.     cy    The y coordinate of the centter of the image.
  228.     d    Distance from the center of the image
  229.     a    Angle of the vector eminating from the center of the         image,  expressed in radians (0-2π).
  230.     r    Input Red Component (0-255)
  231.     g    Input Green Component (0-255)
  232.     b    Input Blue Component (0-255)
  233.     l    Input Luminance Component (HSV) 0-255
  234.     c    Input Hue component (HSV) 0-255
  235.     s    Input Saturation component (HSV) 0-255
  236.     ?    Random Number r where 0  <= r  < 1
  237.     π    Pi (3.14159)
  238.     t    Time (frame number)
  239. In Photoshop, the t value will increase by one each time you invoke the filter using Cmd-F.   In Premiere, the t value will increase by one for each frame that is generated.  To reset t to zero, tweak the parameters by re-initializing the filter.
  240.  
  241. New for version 3.0: You can now specify r,g,b,l,c,s as offsets from the current position, for example r[+1,-3].  This allows you to do image processing tasks which require information from neighboring pixels.  Because of slowness of processing large images in Photoshop, there  is currently a limit on Y offsets - you can't go more than 4 in either direction.
  242. Functions
  243.  
  244. The following functions are available:
  245.  
  246. int(n)    cos(n)        cosh(n)
  247. sqrt(n)    sin(n)        sinh(n)
  248. log(n)    tan(n)        tanh(n)
  249. log10(n)    acos(n)
  250. fabs(n)    asin(n)
  251. exp(n)    atan(n)
  252.  
  253.     These functions correspond to their standard C equivalents.  If you     aren't familiar with C, most of these are available on most spreadsheets.
  254.  
  255.     sin2(n), cos2(n), sin3(n), cos3(n)
  256. These functions compute sine squared (sin(x) * sin(x)), cosine squared, sine cubed (sin(n) * sin(n) * sin(n)) and cosine cubed, respectively. The cubed functions  work nicely for shading fractals, since they provide more gradiation in the mid range, where the eye is more sensitive. See Mandel Color 2 for a nice example.
  257.  
  258.     mand()  - modified for version 3.0
  259. This function returns an integer in the range 0-n, where n is the maximum number of iterations (see below).  If mand(x,y) returns 0, the coordinates x and y are considered to be inside the Mandelbrot set, otherwise the number represents the number of iterations it took before the complex expression z = z2 + c went outside the bounds of 2, and can be thought of as the "distance" to the Mandelbrot set.  Using this number to color the pixels in the image results in some very beautiful images.
  260.  
  261. The maximum number of iterations is recomputed for each frame using the expression in the "Recurse" field.  It is typically computed as 
  262.  
  263.         pixelwidth * -log10(expression width) 
  264.  
  265. In other words, the more you zoom in, the deeper the recursion is, and the longer it takes to compute each frame.
  266.  
  267. If the result of this expression is less than 64, than max iterations is forced to 64.
  268.                 
  269. An optimization has been added that allows you to use MAND(x,y) multiple times in the R, G and B expressions without paying a performance penalty.  Basically, the program remembers the arguments and result of the last call, so that if MAND is called twice with the same arguments, it can return the same value without recomputing it. 
  270.  
  271. For version 3.0, this function has been sped up, and you don't have to pass in X and Y coordinates - it automatically uses the left,top values in the dialog.
  272.     
  273.     man3()
  274. This function is identical in features  to the mand() function, but uses the formula z3 + c.  This function is more computationally expensive than the mand() function, and produces images that are "busier".
  275.  
  276.     manc() or mcpm() - New for version 3.0
  277. This function is identical in features  to the mand() function, but produces continuous instead of discrete values for the equipotential curves outside the mandelbrot set.
  278.  
  279.     julia()
  280. This function is identical in features  to the mand() function, but computes the result for a julia set using the initial values of p and q.
  281.  
  282. The mand(), man3() and julia() functions are extremely computationally expensive, because they may do thousands of iterations to compute the color for each pixel.  For version 2.2, the mand and julia functions have been optimized to provide about a 37% improvement on a Quadra 950.
  283.  
  284. For version 3.0, this function has been sped up, and you don't have to pass in X and Y coordinates - it automatically uses the cx,cy,p0,q0 values in the dialog.
  285.  
  286. New Functions
  287.     Fib(n)
  288.     Returns the nth number in the fibonacci series.
  289.  
  290.     Prime(n)
  291.     Returns 1 if n is a prime number, 0 if not.
  292.  
  293.     Noise(x,y)
  294.     Returns a random number which is unique for each x,y pair.  If x and y     are non-integers, the value will be interpolated.  Returned value is in     the range 0 to 1.
  295.  
  296.     Turb(x,y)
  297.     Similar to Noise() but produces a 1/f fractal noise by summing Noise()     values at different scales.  Returned value is in the range -1 to 1 (so you     can use it to cause natural looking fluctuations in a sine wave).  You can     use the Turb function to create realistic looking clouds, rock and wood     textures.
  298.  
  299.     Cond(condition, aresult, bresult)
  300.     If condition is true, return aresult, else return bresult.  This is similar to     the ?: operator in the C language.  See the Solarize and Weave presets for     examples.
  301.  
  302.     Angle(x,y)
  303.     Returns the angle of the vector eminating from the center of the image
  304.     and passing through x and y.  Returned values range from 0 to 2π.     
  305.  
  306.  
  307.     Dist(x,y)
  308.     Returns the distance from x,y to the center of the image.     
  309.  
  310.  
  311.  
  312. Legal Mumbo-Jumbo
  313.  
  314. Expression is freeware.  The author retains the copyright, including the right to alter or sell the program.  You may use and copy Expression freely only on a non-commercial basis.  You may not alter or sell this program without the author's permission.  THIS INCLUDES "SHAREWARE" COLLECTIONS - PLEASE CONTACT THE AUTHOR IF YOU WISH TO INCLUDE EXPRESSION IN A COLLECTION OF SHAREWARE / PD SOFTWARE WHICH IS BEING SOLD.
  315.  
  316. Expression is being distributed free to the public by the author over AppleLink, America Online and the Internet.  If you would like to upload Expression to another public network, please contact the author at wnm.tech@applelink.apple.com  (Applelink: WNM.TECH, AOL: JBum).
  317.  
  318. Photoshop and Premiere are trademarks of Adobe Systems Incorporated.  Buy your copies now!
  319.  
  320. QuickTime is a trademark of Apple Computer, Inc.
  321. Revision History
  322.  
  323. Note: If you are upgrading from an older (pre 3.0) version of Expression, don't re-use the filter settings that Premiere saves in your Project file.  To re-use an old premiere project, remove the filtered mattes and add new ones.  Expression will crash if Premiere attempts to pass it the saved settings from an older version of Expression.
  324.  
  325. 9/7/93 - Version 3.0b
  326. This version contains some bug fixes that prevent Expression from crashing in Premiere and NIH Image.
  327.  
  328. Another bug was fixed that was affecting the presets which modify an
  329. existing image, such as solarize and invert (the routines that sample pixels weren't working properly).
  330.  
  331.  
  332. 3/27/93 - Version 3.0
  333. Added fractal navigation dialog.
  334.  
  335. Changed the appearence of the dialogs a bit.
  336.  
  337. Made arguments to Man, Man3 and Julia functions implied, rather than explicitly passed in.
  338.  
  339. Added MANC (alias MCPM) continous potential method mandelbrot set function.
  340.  
  341. Sped up floating point to integer conversions on the Quadra.  This makes some filters twice as fast on the Quadra, but it does slow down the fx and other 68030,68020 machines - Sorry!  Perhaps in the future I will ship two versions.
  342.  
  343. Added NOISE(x,y) function.
  344.  
  345. Added TURB(x,y) function.
  346.  
  347. Added COND(cond,a,b) function.  Simplified some presets, (such as Solarize) using COND function.
  348.  
  349. Added ANGLE(x,y) and DIST(x,y) functions.
  350.  
  351. Added FIB() and PRIME() for fun.
  352.  
  353. Added D and A variables - polar coordinates.
  354.  
  355. Added cx and cy variables - center of screen coords.
  356.  
  357. Added c (color) and s (saturation) variables.
  358.  
  359. Switched to a slower, more accurate luminence calculation for l.  
  360.  
  361. Added Logical AND and Logical OR operators (&& and ||).
  362.  
  363. Added offset capabilities to r,g,b,c,s,l.  For example, to see the color of a neighboring pixel, you can say r[+1,-2]
  364.  
  365. Made equality (=) precedence higher than other comparison ops.
  366.  
  367. Fixed parser to treat unary + properly.  As in r[+1,-1]
  368.  
  369. Fixed bug in which Expression wouldn't run in some third party products because it was calling the Photoshop HostProc.
  370.  
  371. Fixed bug in which certain expressions, such as X*Y+SIN(X) didn't compute properly because parse got confused about precedence.
  372.  
  373. Fixed bug in which 2*π in width field didn't get loaded in properly.  This probably caused other wierd memory corruptions.
  374.  
  375. Added new presets to illustrate new features.
  376.  
  377.  
  378. 10/28/92 - Version 2.2
  379.  
  380. The mandelbrot and julia set functions have been optimized for a 37% speed improvement (this was timed on a Quadra 950).
  381.  
  382. Non-fractal expressions have been optmized to be 4-15% faster depending on complexity.
  383.  
  384. Added Oversampling option, which averages four samples for each pixel.  This makes Expression take 4 times longer than usual, but produces higher quality images for continuous expressions.
  385.  
  386. Added Recurse setting, to allow you to make fractal recursion deeper or shallower.
  387.  
  388. More presets have been added, including posterize, solarize, invert, harden, soften and more fractals.
  389.  
  390. Added Sin2 (sine squared), Cos2, Sin3 (sine cubed) and Cos3 functions.  Sine cubed is useful for coloring fractals, since it provides more gradiations in the middle part of the luminence spectrum, where the eye is more sensitive. See Mandel Color 2 for a nice example.
  391.         
  392. You can now use the constant π (option-p).
  393.  
  394. Fixed a bug in which < and > were reversed.
  395.  
  396. Added <=, >=, !=, <> and == operators.
  397.  
  398. 9/21/92 Version 2.1
  399.  
  400. Now works correctly with programs that use an Alpha Channel (specifically Premiere 2.0).  A black alpha channel is output, if necessary.
  401.  
  402. Added zero-check on modulo operator to prevent divide by zero errors.  If an expression resolves to x % 0, the result is zero.
  403.         
  404. Replaced Grayscale check box with Gray/RGB/HSB Modes.
  405.  
  406. Changed random number to be 0 - 1 instead of -32k - +32k.  This range is easier to use.
  407.  
  408. Added more presets, including "default" preset, which you can modify to change the default settings.
  409.  
  410.  Tweaked dialog items a bit for better editing of longer numbers.
  411.  
  412. Increased compiled expression size to 512b.
  413.  
  414. Added MAN3() function for a variant on the mandelbrot set (z3 + c)
  415.  
  416.  
  417. 5/28/92 Version 2.0
  418. (Major changes since version 1.0)
  419.  
  420. Expression now includes functions for rendering Julia Sets and the Mandelbrot set.  These have been used to generate some beautiful QuickTime movies of colorful fractal zooms.
  421.  
  422. Previously, Expression always computed x and y as being the pixel coordinates.  Now, x and y scan a virtual space with dimensions you specify.  You indicate the coordinates of the top,left corner, and the width and height.
  423.  
  424. A zoom factor expression allows you to modify the width and height of each frame, which makes a zoom effect possible.
  425.  
  426. The center option makes the top,left values correspond to the center of the image.  This simplifies specifying a point in the Mandelbrot set to zoom into.
  427.  
  428. Expression has some new presets to show off its new fractal zooming capabilities.  It takes about six hours to generate a 40 second fractal zoom movie on a Quadra 900.
  429.  
  430. Minor changes since version 1.0
  431.  
  432. Added variables px,py,pw,ph,fw,fh.
  433.  
  434. Expression now supports the unary negation operator, e.g. 2 * -(5*6).  Previously, only
  435. subtraction was supported e.g. 2*(0-(5*6))
  436.  
  437. Fixed a bug in number parsing to allow .123 with no leading zero.
  438.  
  439. Added grayscale option to speed up calculations on grayscale images.  This tells Expression that it doesn't need to recompute green and blue, but can copy the red result into the green and blue pixels.
  440.  
  441. Expression now works correctly with grayscale images in Photoshop.
  442.  
  443.  
  444.     Applelink:         WNM.TECH
  445.      America Online:     JBum
  446.     Internet        jbum@netcom.com
  447.  
  448. Happy Expressioning!
  449.  
  450.